<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=674770
-->
<head>
  <title>Test for Bug 674770</title>
  <script type="application/javascript" src="/MochiKit/packed.js"></script>
  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=674770">Mozilla Bug 674770</a>
<p id="display"></p>
<div id="content">
<a href="file_bug674770-1.html" id="link1">test</a>
<div contenteditable>
<a href="file_bug674770-1.html" id="link2">test</a>
</div>
</div>
<pre id="test">
<script type="application/javascript">

SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(function() {
  SpecialPowers.pushPrefEnv({"set":[["middlemouse.paste", true], ["dom.ipc.processCount", 1]]}, startTests);
});

function startTests() {
  var tests = [
    { description: "Testing link in <div>: ",
      target: function () { return document.querySelector("#link1"); },
      linkShouldWork: true },
    { description: "Testing link in <div contenteditable>: ",
      target: function () { return document.querySelector("#link2"); },
      linkShouldWork: false },
  ];
  var currentTest;
  function runNextTest() {
    localStorage.removeItem("clicked");
    currentTest = tests.shift();
    if (!currentTest) {
      SimpleTest.finish();
      return;
    }
    ok(true, currentTest.description + "Starting to test...");
    synthesizeMouseAtCenter(currentTest.target(), { button: 1 });
  }


  addEventListener("storage", function(e) {
    is(e.key, "clicked", currentTest.description + "Key should always be 'clicked'");
    is(e.newValue, "true", currentTest.description + "Value should always be 'true'");
    ok(currentTest.linkShouldWork, currentTest.description + "The click operation on the link " + (currentTest.linkShouldWork ? "should work" : "shouldn't work"));
    SimpleTest.executeSoon(runNextTest);
  }, false);

  SpecialPowers.addSystemEventListener(window, "click", function (aEvent) {
    // When the click event should cause default action, e.g., opening the link,
    // the event shouldn't have been consumed except the link handler.
    // However, in e10s mode, it's not consumed during propagating the event but
    // in non-e10s mode, it's consumed during the propagation.  Therefore,
    // we cannot check defaultPrevented value when the link should work as is
    // if there is no way to detect if it's running in e10s mode or not.
    // So, let's skip checking Event.defaultPrevented value when the link should
    // work.  In such case, we should receive "storage" event later.
    if (currentTest.linkShouldWork) {
      return;
    }

    ok(SpecialPowers.defaultPreventedInAnyGroup(aEvent),
       currentTest.description + "The default action should be consumed because the link should work as is");
    if (SpecialPowers.defaultPreventedInAnyGroup(aEvent)) {
      // In this case, "storage" event won't be fired.
      SimpleTest.executeSoon(runNextTest);
    }
  }, false);

  SimpleTest.executeSoon(runNextTest);
}

</script>
</pre>
</body>
</html>
